﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CondorTravelOperacionesWeb.Source;
using condortravel.operaciones.business.operaciones;
using condortravel.operaciones.common;
using condortravel.operaciones.business.incidenciasOperaciones;
using condortravel.operaciones.entities.Entities;
using condortravel.operaciones.core.DataModel;
using condortravel.operaciones.error.Operaciones;
using condortravel.operaciones.common.Log;

namespace CondorTravelOperacionesWeb.Pages.Controles
{
    public partial class UCListadoIncidencias : ControlBase
    {
        #region  Implementation Events
        public override event ControlBase.EventOnErrorControl ErrorControl;
        public override event ControlBase.EventOnMessageControl MessageControl;

        public delegate void EventSelectIncidencia_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventSelectIncidencia_Click SelectIncidencia_Click;

        public delegate void EventNuevaIncidencia_Click(object sender, EventArgs e);
        public virtual event EventNuevaIncidencia_Click NuevaIncidencia_Click;

        #endregion

        #region Business Objects
        private OperacionesServices operacionesServices;

        public OperacionesServices OperacionesServices
        {
            set { operacionesServices = value; }
        }

        private IncidenciasServices incidenciasServices;
        public IncidenciasServices IncidenciasServices
        {
            set { incidenciasServices = value; }
        }

        #endregion

        #region Page Load Event
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cargaDatosIniciales();
                cargarIncidentesAgente();
            }
        }

        protected void Buscar_Click(object sender, EventArgs e)
        {
            buscarIncidencias();
        }




        protected void gvList_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

        }

        protected void gvList_OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "VerIncidencia")
            {
                SelectIncidencia_Click(sender, e);
            }

        }
        /// <summary>
        /// Por cada fila entra a este metodo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    Tb_Incidencia itinerario = (Tb_Incidencia)e.Row.DataItem;
                    Label lblAgente = (Label)e.Row.FindControl("lblAgente");
                    Label lblCliente = (Label)e.Row.FindControl("lblCliente");
                    
                    Label lblEstado = (Label)e.Row.FindControl("lblEstado");
                    lblEstado.Text = (itinerario.Tb_Estado_Incidencia != null) ? itinerario.Tb_Estado_Incidencia.descripcion : " - ";
                    lblAgente.Text = (itinerario.Tb_Agente != null) ? itinerario.Tb_Agente.nombre : " - ";
                    lblCliente.Text = (itinerario.Tb_Cliente != null) ? itinerario.Tb_Cliente.nombre + " " + itinerario.Tb_Cliente.apellido : " - ";
                    
                }

            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void cmdNuevoIncidente_Click(object sender, EventArgs e)
        {
            NuevaIncidencia_Click(sender, e);
        }

        #endregion

        #region Private methods

        /// <summary>
        /// 
        /// </summary>
        public void actualizarLista()
        {
            cargarIncidentesAgente();
        
        }

        /// <summary>
        /// Obtiene la lista de itinerarios del agente logueado y que estan en estado
        /// pendientes
        /// </summary>
        private void cargarIncidentesAgente()
        {
            try
            {
                FilterIncidentesCriteria filter = new FilterIncidentesCriteria();
                //filter.Estado = AppStatic.VAR_INCIDENTE_ESTADO_PENDIENTE; //En ejecución
                filter.Agente = this.User.UserID;
                List<Tb_Incidencia> lista = incidenciasServices.getListIncidentesByAgente(filter);
                if (lista.Count == 0)
                    throw new condortravel.operaciones.error.Operaciones.IncidentesException.NoExisteIncidenciasException();
                gvList.DataSource = lista;
                gvList.DataBind();
            }
            catch (Exception exc1)
            {
                this.ErrorControl(null, exc1);
                LogApp.WriteLog(ELogLevel.ERROR, string.Format("{0}-{1}", exc1.Message, exc1.StackTrace));
            }

        }

        /// <summary>
        /// Obtiene la lista de Incidencias segun el criterio ingresado
        /// </summary>
        private void buscarIncidencias()
        {
            try
            {
                FilterIncidentesCriteria filter = obtenerCriterios();
                List<Tb_Incidencia> lista = incidenciasServices.getListIncidentesByCriteria(filter);
                gvList.DataSource = lista;
                gvList.DataBind();
                if (lista.Count == 0)
                    throw new IncidentesException.NoExisteIncidenciasException();
            }
            catch (Exception exc1)
            {
                this.ErrorControl(null, exc1);
                LogApp.WriteLog(ELogLevel.ERROR, string.Format("{0}-{1}", exc1.Message, exc1.StackTrace));
            }

        }


        /// <summary>
        /// Obtener la lista de los criterios
        /// </summary>
        /// <returns></returns>
        private FilterIncidentesCriteria obtenerCriterios()
        {
            FilterIncidentesCriteria criterios = new FilterIncidentesCriteria();
            criterios.Agencia = (cboAgencia.SelectedIndex == 0 ? 0 : int.Parse(cboAgencia.SelectedValue));
            criterios.Agente = (cboAgente.SelectedIndex == 0 ? 0 : int.Parse(cboAgente.SelectedValue));
            criterios.Apellidos = txtApellidos.Text.Trim();
            criterios.Nombre = txtNombre.Text.Trim();
            criterios.Dni = txtDNI.Text.Trim();
            criterios.Estado = (cboEstadoItinerario.SelectedIndex == -1 ? 0 : int.Parse(cboEstadoItinerario.SelectedValue));
            criterios.Incidente = (txtCodigo.Text.Trim().Equals(String.Empty) ? 0 : int.Parse(txtCodigo.Text));
            //criterios.Nombre
            criterios.GrupoAsignado = (cboGrupoAsignado.SelectedIndex == -1 ? 0 : int.Parse(cboGrupoAsignado.SelectedValue));
            criterios.Pais = (cboPais.SelectedIndex == -1 ? 0 : int.Parse(cboPais.SelectedValue));
            criterios.Ciudad = (cboCiudad.SelectedIndex == -1 ? 0 : int.Parse(cboCiudad.SelectedValue));
            return criterios;
        }

        /// <summary>
        /// 
        /// </summary>
        private void cargaDatosIniciales()
        {
            Util.LoadDropDownList(cboAgencia, Estaticas.getListAgencia(), "descripcion", "Agencia_ID", true, "0", "-");
            Util.LoadDropDownList(cboAgente, Estaticas.getListAgente(), "nombre", "Agente_ID", true, "0", "-");
            Util.LoadDropDownList(cboPaqueteTuristico, Estaticas.getListPaqueteTuristico(), "descripcion", "PaqueteTuristico_ID", true, "0", "-");
            Util.LoadDropDownList(cboEstadoItinerario, Estaticas.getListEstadoIncidencia(), "descripcion", "estado_Incidencia_ID", true, "0", "-");
            Util.LoadDropDownList(cboGrupoAsignado, Estaticas.getListGrupoAsignacion(), "descripcion", "grupoAsignacion_ID", true, "0", "-");
            Util.LoadDropDownList(cboPais, Estaticas.getListPais(), "descripcion", "pais_ID", true, "0", "-");
            Util.LoadDropDownList(cboCiudad, Estaticas.getListCiudad(), "descripcion", "ciudad_ID", true, "0", "-");
            //Carga datos x defecto
            if (this.User != null)
                Util.SelectItemDropDownList(cboAgente, this.User.UserID.ToString());

            //Seleccionar el estado x defecto
            Util.SelectItemDropDownList(cboEstadoItinerario, AppStatic.VAR_OPE_ESTADO_EJECUCION.ToString());

            //Para validar el ingreso de algun criterio
            cmdBuscar.Attributes.Add("onclick", String.Format("if(!FF_checkFieldsEmpty()) return false;"));

            
            

        }
        #endregion

     

        #region Public methods

        #endregion

    }
}